Topics (Summer 2025)

Please read the general course information first.

We list specific aspects that are of interest to one or more members of our research group. By selecting three of these as your desired seminar/project topics, you signal to us which aspects are most interesting to you.

Feel free to propose your own topics, or variants of existing topics, but note that we only offer topics that we believe we can actually supervise adequately.

Programming Languages for Distributed Systems

Many application scenarios require some form of “distributed logic”: collaboration, communication, sharing data, accessing services, synchronization between multiple devices, etc. However, designing distributed applications is often seen as too hard, thus applications are moved “to the cloud” at the cost of offline-capability, privacy, and performance.

Instead, we investigate programming language based methodologies to answer hard questions systematically. Typical questions include: How can we deal with conflicts that arise from merging changes from multiple peers? How can users relate their local copy of the data to the global state of the system? What features and guarantees do applications actually require?

Choose from these specific proposals, or suggest a topic of your own:

Design and Implementation of a CRDT for Spreadsheets/Tabular Data Project
ECROs: Building Global Scale Systems from Sequential Code Seminar
HydroFlow: Distributed Data Flows in Rust Seminar
Implementing (pure) operation-based CRDTs in Scala Project
Implementing Distributed (Consensus) Protocols with Replicated Data Types Project
Implementing Eg-walker Text CRDT in Scala Project
Katara: Synthesizing CRDTs with Verified Lifting Seminar
Nested Pure Operation-Based CRDTs Seminar
Optimizing Distributed Protocols with Query Rewrites Seminar
Session Types Project

Advanced Functional Programming

Programming language techniques beyond those present in mainstream languages are often useful to solve a wide range of problems in different domains. An important part of programming language design is the study of repeating patterns in the design of programming languages, a succinct and correct description of their behavior, further extension and generalization to make them more powerful, and then again the search for intuitive examples of their use.

Often advanced functional programming takes inspiration from logic and math.

Choose from these specific proposals, or suggest a topic of your own:

Declarative Logic Programming Seminar, Project
Geometric Algebra: Emerging 3d graphics abstractions Seminar, Project
Parser Combinators Seminar
Probabilistic Programming with Gaussian Distributions Seminar, Project
Proof-Carrying Code Seminar
Propel: Automated Verification of CRDTs and Fundamental Algebraic Laws Seminar
Propositions as Types Seminar
Random Testing for Functional Programs Project
Reasoning about Polymorphic Functions Seminar
Reversible Programming Seminar
Type Inference Seminar, Project
Verified Choreographic Compilers Seminar

Verification

Choose from these specific proposals, or suggest a topic of your own:

Bounded Model Checking in Practice: CBMC vs. ESBMC Seminar
Dafny – Verification-Aware Programming Language Seminar
Dafny: Implement and Verify Modular Programs Project
Frame Problem: Dynamic Frames vs Separation Logic Seminar
Z3: SMT Solving in Practice Project
Z3: The Backbone of Modern Verification Seminar

For related topics, also take a look at the general course offers by our research group: Courses at STG

Specifically, in you may be interested in the Seminar on Artificial Intelligence for Coding Assistance and in the Project on Software Development Tools